home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / sun4.md / jaguarDefs.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  21KB  |  608 lines

  1. /*
  2.  * jaguarDefs.h --
  3.  *
  4.  *    Declarations of data structures and constants for the Interphase
  5.  *    V/SCSI 4210 Jaguar SCSI host bus adapter (HBA). This definitions 
  6.  *    in this file come from the "V/SCSI 4210 Jaguar System Interface
  7.  *    User's Guide", document number UG-0770-000-X0F. The document was
  8.  *    obtained from:
  9.  *        Interphase Corporation
  10.  *        Application Engineering Department
  11.  *        2925 Merrell Road
  12.  *        Dallas, Tx 75229
  13.  *
  14.  * Note that this file should only contain information for the Jaguar 
  15.  * HBA as a generic VME bus device.  This means that information about 
  16.  * the Jaguar's interface to particle machines should not be included.
  17.  *
  18.  * The structures in this file are set up so that most C compilers will generate
  19.  * layouts of the structures that match the Jaguar vision of the data 
  20.  * structures. These structures should only need to be changed if the
  21.  * Jaguar firmware changes.
  22.  *
  23.  * Copyright 1989 Regents of the University of California
  24.  * Permission to use, copy, modify, and distribute this
  25.  * software and its documentation for any purpose and without
  26.  * fee is hereby granted, provided that the above copyright
  27.  * notice appear in all copies.  The University of California
  28.  * makes no representations about the suitability of this
  29.  * software for any purpose.  It is provided "as is" without
  30.  * express or implied warranty.
  31.  *
  32.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/dev/sun4.md/jaguarDefs.h,v 9.0 89/09/12 15:00:03 douglis Stable $ SPRITE (Berkeley)
  33.  */
  34.  
  35. #ifndef _JAGUAR_HBA_INT
  36. #define _JAGUAR_HBA_INT
  37.  
  38. /* constants */
  39.  
  40. /* data structures */
  41. /*
  42.  * The Jaguar communicates with the host computer using 2K bytes of dual 
  43.  * ported memory mapped into the Short I/0 space of the VMEbus.  To 
  44.  * communicate with the Jaguar, the host builds command blocks in the
  45.  * shared memory and points the Jaguar at them.  The following type
  46.  * declarations defined the memory image of these command blocks. The
  47.  * acronyms (ie MCSB, MCE, etc) are taken from the Jaguar User's guide
  48.  * mentioned above. The referend page numbers are also from this guide.
  49.  *
  50.  * Note that the Jaguar's processor is a big endian hence these structures
  51.  * probably will be incorrect if the host is little endian.
  52.  */
  53.  
  54. /*
  55.  * In order to simplify some of the computations in this header file, we
  56.  * set the maximum size IOPB to be 64 bytes.  This allows us to handle 
  57.  * SCSI command blocks upto (64-32) bytes with out using extented pass-thru
  58.  * mode.  It also makes indexing into arrays of IOPBs fast.
  59.  */
  60.  
  61. #define    JAGUAR_MAX_IOBP_SIZE    64
  62. #define    JAGUAR_MAX_SCSI_CMDSIZE    (JAGUAR_MAX_IOBP_SIZE - 32)
  63.  
  64.  /*
  65.   ************************************************************************
  66.   *            MCSB
  67.   ***********************************************************************
  68.   * The master control/status block (MCSB) is used by the Jaguar to pass
  69.   * and receive information about the overall operation of the controller.
  70.   * Page 8
  71.   * Note that the MCSB must reside the the short I/O space of the VME bus. 
  72.   * Because of this the host processor must only do 16 bit stores to the
  73.   * fields in the MCSB.  
  74.   */
  75.  
  76. typedef struct JaguarMCSB {
  77.     unsigned short status;    /* The master status register (MSR). 
  78.                  * Used to report board level status.
  79.                  * Read only to the host. Defined below.
  80.                  */
  81.     unsigned short control;    /* The master control register (MCR). 
  82.                  * Used to control board. Defined below. 
  83.                  * The Jaguar never chanages any of the 
  84.                  * bits in this register.
  85.                  */
  86.     unsigned short queueAvail;  /* The interrupt on queue available register.
  87.                  * (IQAR). Controls the issue of interrupts
  88.                  * when queue entries become available.
  89.                  */
  90.     unsigned short queueHead;    /* The queue head pointer. This location is
  91.                  * for use by the host software and not used
  92.                  * by the Jaguar.
  93.                  */
  94.     unsigned short thawQueue;    /* The thaw work queue register. This register
  95.                  * is used to restart a work queue after an
  96.                  * error. Defined below.
  97.                  */
  98.     unsigned short reserved[3];    
  99.  
  100. } JaguarMCSB;
  101.  
  102. /*
  103.  * JAGUAR_MCSB_SIZE - The size in bytes of the MCSB according to 
  104.  * the Jaguar.  This should equal sizeof(JaguarMCSB) or all bets are off.
  105.  * Page 5
  106.  */
  107.  
  108. #define    JAGUAR_MCSB_SIZE    16
  109.  
  110. /*
  111.  * The master status register (MSR). Bits 15 thru 3 are reserved. 
  112.  * Pages 8-9
  113.  * NOT_AVAILABLE  - Bit indicating controller available for commands.
  114.  * BOARD_OK      - Bit indicating power-up diagnostics passed. Not valid for
  115.  *            100 microseconds after reset.
  116.  * FLUSH_COMPLETE - Bit indicating the completion of a Queue flush operation.
  117.  *
  118.  */
  119.  
  120. #define    JAGUAR_MSR_NOT_AVAILABLE    0x1
  121. #define    JAGUAR_MSR_BOARD_OK    0x2
  122. #define    JAGUAR_MSR_FLUSH_COMPLETE    0x4
  123.  
  124. /*
  125.  * The master control register MCR.  Bit 1, 3-10, 14-15 are reserved and must
  126.  * be set to zero.
  127.  * Page 10-12.
  128.  * START_QUEUES  -     Bit used to enable queue mode.
  129.  * FLUSH_QUEUES_RPT      Bit used to flush all work queues with report 
  130.  *                given for each command flushed.
  131.  * FLUSH_QUEUES     -    Bit used to flush all command queues.
  132.  * RESET     -    Reset the controller and all SCSI busses.  Must leave
  133.  *            set for 50 microseconds.
  134.  * SYSFAIL_ENA     -     Enables the Jaguar to assert the VME Sysfail signal
  135.  *            if it fails diagnostics.
  136.  */
  137.  
  138. #define    JAGUAR_MCR_START_QUEUES           0x1
  139. #define    JAGUAR_MCR_FLUSH_QUEUES_RPT       0x4
  140. #define    JAGUAR_MCR_FLUSH_QUEUES         0x800
  141. #define    JAGUAR_MCR_RESET            0x1000
  142. #define    JAGUAR_MCR_SYSFAIL_ENA        0x2000
  143.  
  144. /*
  145.  * The interrupt of queue available registers IQAR. 
  146.  * Page 12-14.
  147.  * INTR_VECTOR    - Macro to convert an VME interupt level and vector into the
  148.  *          value to be stored into the IQAR and CIB.
  149.  * HALF_EMPTY_INTR - Bit indicating interrupt when queue is half ready.
  150.  * INTR_ENABLE       - Bit indicating queue avail interrupt enable.
  151.  */
  152.  
  153. #define    JAGUAR_INTR_VECTOR(level, vector)    (((level)<<8)|(vector))
  154. #define    JAGUAR_IQAR_HALF_EMPTY_INTR    0x4000
  155. #define    JAGUAR_IQAR_INTR_ENABLE        0x8000
  156.  
  157. /*
  158.  * The thaw work queue register.  Bits 1-7 are reserved must be zero.
  159.  * Page 14-15
  160.  * THAW_WORK_QUEUE_BIT - Bit indicating thawing of the specified work queue.
  161.  * THAW_WORK_QUEUE     - Macro to compute the value to store in the 
  162.  *             thaw work queue register to thaw a queue. Thaw
  163.  *             is complete when Jaguar resets THAW_WORK_QUEUE_BIT.
  164.  *
  165.  */
  166.  
  167. #define    THAW_WORK_QUEUE_BIT    0x1
  168. #define    THAW_WORK_QUEUE(workQueue)    (THAW_WORK_QUEUE_BIT|((workQueue)<<8))
  169.  
  170.  /*
  171.   ************************************************************************
  172.   *            CQE
  173.   ************************************************************************
  174.   * The command CQE provides the Jaguar with all the info needed to find and
  175.   * execute commands.
  176.   * Page 16.
  177.   */
  178.  
  179. typedef struct JaguarCQE {
  180.     unsigned short    controlReg;    /* Queue entry control register. 
  181.                      * (QECR). Used to kick off command
  182.                      * execution. Defined below.
  183.                      */
  184.     unsigned short    iopbOffset;    /* Offset into the Jaguar's memory
  185.                      * of the IOPB for this command.
  186.                      */
  187.     unsigned short    commandTag[2];    /* Four bytes for the host software. */
  188.     unsigned char    iopbLength;    /* The length of the IOPB for this
  189.                      * command. (In 32 bit words!!!)
  190.                      */
  191.     unsigned char    workQueue;    /* What work queue is this command
  192.                      * destine.
  193.                      */
  194.     unsigned short    reserved;    /* Zero me. */
  195. } JaguarCQE;
  196.  
  197.  
  198. /*
  199.  * JAGUAR_CQE_SIZE - The size in bytes of the CQE according to 
  200.  * the Jaguar.  This should equal sizeof(JaguarCQE) or all bets are off.
  201.  * Page 16
  202.  */
  203.  
  204. #define    JAGUAR_CQE_SIZE    12
  205.  
  206. /*
  207.  * The queue entry control register (QECR). Bits 3-7, 12-15 are reserved and
  208.  * must be zero. Bits 8-11 are the IOPB type and since the Jaguar only 
  209.  * supports type zero IOBBs, bits 8-11 are also zero.
  210.  * Page 17-18
  211.  * GO_BUSY    - Start the command.  This bit set means the CQE is busy.
  212.  * ABORT_ACK    - Stop aborting commands.
  213.  * HIGH_PRI    - This is a high priority command. Put it in the front of the
  214.  *          work queue.
  215.  */
  216.  
  217. #define    JAGUAR_CQE_GO_BUSY    0x1
  218. #define    JAGUAR_CQE_ABORT_ACK    0x2
  219. #define    JAGUAR_CQE_HIGH_PRI    0x4
  220.  
  221.  /*
  222.   ************************************************************************
  223.   *            CCSB
  224.   ************************************************************************
  225.   * The controller configuation status block is used by the Jaguar to report
  226.   * the hardware and firmware configuration of the controller.
  227.   * Page 25-28
  228.   */
  229.  
  230. typedef struct JaguarCCSB {
  231.     char    reserved1[3];
  232.     char    code[3];    /* Product code - 3 ASCII chars. */
  233.     char    reserved2[3];
  234.     char    variation;    /* Product variation. */
  235.     char    reserved3[3];
  236.     char    firmwareLevel[3];/* Firmware revison level - 2 ASCII chars. */
  237.     char    reserved4[2];
  238.     char    firmwareDate[8]; /* Firmware release data. Format MMDDYYYY. */
  239.     char    reserved5[2];
  240.     unsigned short bufferRAMsize; /* The amount of buffer RAM on board. Units
  241.                    * is kilobytes.
  242.                    */
  243.     char    reserved6[2];
  244.     unsigned char primaryID;    /* The target ID of the HBA on the primary bus.
  245.                  * Encoded in binary.
  246.                  */
  247.     unsigned char secondaryID;    /* The target ID of the HBA on the secondary
  248.                  * bus. Encoded in binary.
  249.                  */
  250.  
  251.     char    reserved[86];
  252.  
  253. } JaguarCCSB;
  254.  
  255. /*
  256.  * JAGUAR_CCSB_SIZE - The size in bytes of the CCSB according to 
  257.  * the Jaguar.  This should equal sizeof(JaguarCCSB) or all bets are off.
  258.  * Page 25
  259.  */
  260.  
  261. #define    JAGUAR_CCSB_SIZE    120
  262.  /*
  263.   ************************************************************************
  264.   *            CIB
  265.   ************************************************************************
  266.   * The controller initialization block is not initialize the Jaguar controller.
  267.   * To is used by the initialize controller command 0x41 and must reside in
  268.   * the dual ported memory.
  269.   * Page 58-60
  270.   */
  271.  
  272. typedef struct JaguarCIB {
  273.     unsigned short numQueueSlots;    /* Number of slots in each command Q. */
  274.     unsigned short dmaBurstCount;    /* Number of DMA transfers the
  275.                      * jaguar will perform before releasing
  276.                      * the VME bus.
  277.                      */
  278.     unsigned short normalIntrVector;    /* Normal completion interrupt vector.*/
  279.     unsigned short errorIntrVector;    /* Error completion interrupt vector.*/
  280.     unsigned short priTargetID;        /* Primary bus SCSI ID. */
  281.     unsigned short secTargetID;        /* Secondary bus SCSI ID. */
  282.     unsigned short offsetCRB;        /* Offset into dual ported memory of the
  283.                      * command reponse block. 
  284.                      */
  285.     unsigned short scsiSelTimeout[2];    /* SCSI selection time out value in 
  286.                      * milliseconds.  0 -> infinite.
  287.                      */
  288.     unsigned short scsiReselTimeout[2];    /* SCSI re-selection time out value in 
  289.                      * (32 milliseconds) ticks. 
  290.                      * 0 -> infinite.
  291.                      */
  292.     unsigned short  vmeTimeout[2];    /* VME timeout value. 32 milliseconds
  293.                      * ticks.  0 -> 100 milliseconds. 
  294.                      */
  295.     unsigned short reserved[3];
  296. } JaguarCIB;
  297.  
  298.  
  299. #define    JAGUAR_CIB_SIZE 32
  300. /*
  301.  * For secTargetID and priTargetID, BUS ID directing the board to read
  302.  * default from DIP switches.
  303.  */
  304. #define    JAGUAR_DEFAULT_BUS_ID    0x8
  305.  
  306.  /*
  307.   ************************************************************************
  308.   *            IOPB
  309.   ************************************************************************
  310.   * The i/O parameter block (IOPB) is used to send commands to the Jaguar.
  311.   * Page 31-
  312.   *
  313.   * The Format of the IOPB control block depends on the command being
  314.   * executed. 
  315.   */
  316.  
  317. typedef struct JaguarIOPB {
  318.     unsigned short    command;    /* Command to issue. Defined below. */
  319.     unsigned short     options;    /* Command options to used. 
  320.                      * Defined below. 
  321.                      */
  322.     unsigned short    returnStatus;    /* Return status of the command. */
  323.     unsigned short     reserved;
  324.     unsigned short    intrVector;    /* Normal and error error vectors. */
  325.     unsigned short    intrLevel;    /* VME interrupt level. */
  326.     unsigned short     reserved2;
  327.     unsigned short    addrModifier;    /* Controls the data transfer on the
  328.                      * VME bus. Defined below. 
  329.                      */
  330.     unsigned short    bufferAddr[2];    /* Address of data buffer for cmd. */
  331.     unsigned short    maxXferLen[2];    /* Maximum number of bytes to xfer. */
  332.     unsigned short    reserved3[2];    
  333.     /*
  334.      * The data following the reserved3 field is command depended. 
  335.      */
  336.     union {
  337.     struct {
  338.         /*
  339.          * PASS_THRU, PASS_THRU_EXT, and RESET commands.
  340.          */
  341.         unsigned short length;      /* The length of the SCSI command 
  342.                        * block. Used only for the 
  343.                        * PASS_THRU_EXT command. This 
  344.                        * is also the SCSI Bus ID for
  345.                        * RESET commands. 
  346.                        */
  347.         unsigned short unitAddress;    /* SCSI bus and target ID. */
  348.         unsigned char  cmd[JAGUAR_MAX_SCSI_CMDSIZE];
  349.                     /* Scsi Command Block. */
  350.     } scsiArg;
  351.     struct {
  352.         /*
  353.          * DIAG_CMD command.
  354.          */
  355.         unsigned short romTest;    /* ROM test results. */
  356.         unsigned short scrRamTest;    /* Scratch pad RAM test results. */
  357.         unsigned short bufRamTest;    /* Buffer RAM test results. */
  358.         unsigned short eventRamTest;/* Evant RAM test results. */
  359.         unsigned short priPort;    /* Primary SCSI port test results. */
  360.         unsigned short secPort;    /* Primary SCSI port test results. */
  361.     } diagArg;
  362.     struct {
  363.         /*
  364.          * INIT_WORK_QUEUE_CMD, DUMP_WORK_QUEUE_CMD, FLUSH_WORK_QUEUE_CMD
  365.          */
  366.          unsigned short number;    /* Work number queue to initialize. */
  367.          unsigned short options;    /* Work queue options. Defined below. */
  368.          unsigned short slots;    /* Number of slots in work queue. */
  369.          unsigned short priority;    /* Priority level of queue. */
  370.     } workQueueArg;
  371.     } cmd;
  372. }  JaguarIOPB;
  373.  
  374.  
  375. /*
  376.  * IOPB commands. 
  377.  *
  378.  * SCSI IOPBs:
  379.  * PASS_THRU_CMD - Send a SCSI command to the specified target. 
  380.  * PASS_THRU_EXT_CMD - Send a command to the specified target. Command doesn't
  381.  *               fit in IOPB.
  382.  * RESET_CMD    - Reset the SCSI bus.
  383.  *
  384.  * Control IOBs:
  385.  * DIAG_CMD    - Perform diagnostics.
  386.  * INIT_HBA_CMD - Initialized the controller.
  387.  * INIT_WORK_QUEUE_CMD - Initialize a work queue.
  388.  * DUMP_HBA_PARAMS_CMD - Return the initialization parameters.
  389.  * DUMP_WORK_QUEUE_CMD    - Return the parameters of a work queue.
  390.  * FLUSH_WORK_QUEUE_CMD - Flush a work queue. 
  391.  */
  392.  
  393. #define    JAGUAR_PASS_THRU_CMD        0x20
  394. #define    JAGUAR_PASS_THRU_EXT_CMD    0x21
  395. #define    JAGUAR_RESET_CMD        0x22
  396.  
  397. #define    JAGUAR_DIAG_CMD            0x40
  398. #define    JAGUAR_INIT_HBA_CMD        0x41
  399. #define    JAGUAR_INIT_WORK_QUEUE_CMD    0x42
  400. #define    JAGUAR_DUMP_HBA_PARAMS_CMD    0x43
  401. #define    JAGUAR_DUMP_WORK_QUEUE_CMD    0x44
  402. #define    JAGUAR_FLUSH_WORK_QUEUE_CMD     0x49
  403.  
  404.  
  405.  
  406. #define    JAGUAR_CMD_NAMES { \
  407.     { JAGUAR_PASS_THRU_CMD, "SCSI Pass-Through"} , \
  408.     { JAGUAR_PASS_THRU_EXT_CMD, "SCSI Pass-Through Extended"}, \
  409.     { JAGUAR_RESET_CMD, "SCSI Reset"}, \
  410.     { JAGUAR_DIAG_CMD, "Perform Diagnostics" }, \
  411.     { JAGUAR_INIT_HBA_CMD, "Initalize Controller" }, \
  412.     { JAGUAR_INIT_WORK_QUEUE_CMD, "Initalize Work Queue" }, \
  413.     { JAGUAR_DUMP_HBA_PARAMS_CMD, "Dump Initialization Parameters" }, \
  414.     { JAGUAR_DUMP_WORK_QUEUE_CMD, "Dump Work Queue Parameters" }, \
  415.     { JAGUAR_FLUSH_WORK_QUEUE_CMD, "Flush Work Queue" } }
  416.  
  417. /*
  418.  * IOPB options:
  419.  *
  420.  * JAGUAR_IOPB_INTR_ENA    - Interrupt upon command completion.
  421.  * JAGUAR_IOPB_SCAT_GATH    - Enable scatter/gather.
  422.  * JAGUAR_IOPB_TO_HBA    - Data is read from the VME Bus to HBA.
  423.  *
  424.  *  These work on only the work queue:
  425.  * JAGUAR_IOPB_RPT_FLUSH    - Report after each command is flushed.
  426.  * JAGUAR_IOPB_RESET_IP    - Reset SCSI Bus when an In procgress command
  427.  *                  is flushed.
  428.  */
  429.  
  430. #define    JAGUAR_IOPB_INTR_ENA    0x1
  431. #define    JAGUAR_IOPB_SCAT_GATH    0x2
  432. #define    JAGUAR_IOPB_TO_HBA        0x100
  433.  
  434. #define    JAGUAR_IOPB_RPT_FLUSH    0x100
  435. #define    JAGUAR_IOPB_RESET_IP    0x200
  436.  
  437. /*
  438.  * IOPB interrupt vector (intrVector).
  439.  *
  440.  * JAGUAR_IOPB_INTR_VECTOR()    Set the intrVector field on of IOPB
  441.  *                     to interrupt with the specified error
  442.  *                    and normal  vectors.
  443.  */
  444.  
  445. #define    JAGUAR_IOPB_INTR_VECTOR(normalVector, errorVector) \
  446.             (((normalVector)<<8)|(errorVector))
  447. /*
  448.  * IOPB address modifier. The address modifier controls how the Jaguar reads and
  449.  * writes data to and from the VME bus. Three components make up the SCSI 
  450.  * addr modifier: the VME address modifier, the memory type, and transfer type.
  451.  * The low byte of the transfer type is the VME address modifier.
  452.  *
  453.  */
  454.  
  455. /*
  456.  * Memory types:
  457.  * JAGUAR_16BIT_MEM_TYPE    - Transfer data 16 bits at a time.
  458.  * JAGUAR_32BIT_MEM_TYPE    - Transfer data 32 bits at a time.
  459.  * JAGUAR_BOARD_MEM_TYPE    - Transfer data to or from Jaguar dual 
  460.  *                  port memory.
  461.  *
  462.  * Transfer Type:
  463.  *
  464.  * JAGUAR_NORMAL_MODE_XFER    - Normal transfer mode.
  465.  * JAGUAR_BLOCK_MODE_XFER    - Block transfer mode.
  466.  * JAGUAR_NO_INC_MODE_XFER - Diable incrementing addresses transfer mode.
  467.  */
  468.  
  469. #define    JAGUAR_16BIT_MEM_TYPE    0x100
  470. #define    JAGUAR_32BIT_MEM_TYPE    0x200
  471. #define    JAGUAR_BOARD_MEM_TYPE    0x300
  472.  
  473. #define    JAGUAR_NORMAL_MODE_XFER    0x000
  474. #define JAGUAR_BLOCK_MODE_XFER    0x400
  475. #define    JAGUAR_NO_INC_MODE_XFER    0x800
  476.  
  477. /*
  478.  * UnitAddress parameter for scsiCmd type parameters.
  479.  * JAGUAR_UNIT_ADDRESS() - Form an SCSI unit address from the Bus,
  480.  * targetID and logical unit number. This macro can't handle extended 
  481.  * addressing.
  482.  */
  483.  
  484. #define    JAGUAR_UNIT_ADDRESS(bus, targetID, lun) \
  485.         ((targetID) | ((lun)<<3) | ((bus)<<6))
  486.  
  487. /*
  488.  * Work Queue options.  This constants define the options field for
  489.  * the INIT_WORK_QUEUE_CMD type commands.
  490.  * Page 64-65
  491.  *
  492.  * ABORT_ENABLE    - Abort all commands in work queue afther error.
  493.  * FREEZE_QUEUE - Freeze the work queue on any error.
  494.  * PARITY_ENABLE - Enable SCSI bus parity checking.
  495.  * INIT_QUEUE     - Initialize queue if it is already initialize.
  496.  */
  497.  
  498. #define    JAGUAR_WQ_ABORT_ENABLE    0x1
  499. #define    JAGUAR_WQ_FREEZE_QUEUE  0x4
  500. #define    JAGUAR_WQ_PARITY_ENABLE    0x8
  501. #define    JAGUAR_WQ_INIT_QUEUE    0x8000
  502.  
  503. /*
  504.  * Controller error code names:
  505.  */
  506. #define    JAGUAR_ERROR_CODES { \
  507.     { 0x00, "Good Status"} , /* MACSI/controller error codes. 0x00-0x0a */ \
  508.     { 0x01, "Queue Full Error"} , \
  509.     { 0x02, "Work Queue Initialization Error"}, \
  510.     { 0x03, "First Command Error"}, \
  511.     { 0x04, "Command Code Error"}, \
  512.     { 0x05, "Queue Number Error"}, \
  513.     { 0x06, "Queue Already Initialized"}, \
  514.     { 0x07, "Queue Un-Initialized"}, \
  515.     { 0x08, "Queue Mode Not Ready"}, \
  516.     { 0x09, "Command Unavailable"}, \
  517.     { 0x0a, "Priority Error"}, \
  518.     { 0x10, "Reserved Field Error"}, /* General error code information. */ \
  519.     { 0x11, "Reset Bus Status"}, \
  520.     { 0x12, "Port 2 Unavailable"}, \
  521.     { 0x13, "SCSI ID Error"}, \
  522.     { 0x14, "SCSI Bus Reset Status"}, \
  523.     { 0x15, "Command Aborted by Reset"}, \
  524.     { 0x20, "VME Bus Error"},     /* VME Errors. */ \
  525.     { 0x21, "VME Timeout Error"}, \
  526.     { 0x23, "VME Illegal Address"}, \
  527.     { 0x24, "VME Illegal Memory Type"}, \
  528.     { 0x25, "VME Illegal Count Specified"}, \
  529.     { 0x30, "SCSI Selection Timeout Error"},     /* SCSI Errors. */ \
  530.     { 0x31, "SCSI Discounnect Timeout Error"}, \
  531.     { 0x32, "SCSI Error"}, \
  532.     { 0x30, "SCSI Transfer Count Exception"}, \
  533.     { 0x80, "Flush on error in progress"}, \
  534.     { 0x81, "Flush work queue status"}}
  535.  
  536.  
  537. /*
  538.  * Scatter/gather element list Format. 
  539.  */
  540. typedef struct JaguarSG {
  541.     unsigned short    byteCount;    /* Number of bytes in element. */
  542.     unsigned short    bufferAddr[2];    /* Address of data buffer. */
  543.     unsigned short    addressModifier; /* Address modifier of data buffer. */
  544. } JaguarSG;
  545.  
  546. #define    JAGUAR_SG_SIZE    8
  547.  /*
  548.   ************************************************************************
  549.   *            CRB
  550.   ************************************************************************
  551.   * The command response block is used by the Jaguar to post command 
  552.   * completion status and data.
  553.   * Page 22.
  554.   */
  555.  
  556. typedef struct JaguarCRB {
  557.     unsigned short status;    /* Command response status word (CRSW). 
  558.                  * Used for handshake and respose type.
  559.                  * Defined below.
  560.                  */
  561.     unsigned short reserved;    /* zero. */
  562.     unsigned short commandTag[2]; /* Command tag from CQE. */
  563.     unsigned char  iopbLength;    /* IOBP length from CQE. */
  564.     unsigned char  workQueue;    /* Work queue number from CQE. */ 
  565.     unsigned short reserved2;    /* zero. */
  566.     JaguarIOPB       iopb;    /* IOPB of command. */
  567. } JaguarCRB;
  568.  
  569. /*
  570.  * JAGUAR_CRB_SIZE - The size in bytes of the CRB according to 
  571.  * the Jaguar.  This should equal sizeof(JaguarCRB)-sizeof(JaguarIOPB)
  572.  * or all bets are off.
  573.  * Page 22
  574.  */
  575.  
  576. #define    JAGUAR_CRB_SIZE    12
  577.  
  578. /*
  579.  * The Command response status word (CRSW).  Bits 7-15 reserved.
  580.  *
  581.  * BLOCK_VALID         - The CRB is valid.  
  582.  * CLEAR_INTERRUPT      - Used by the host to ack the CRB.
  583.  * COMMAND_COMPLETE     - The CRB is for a command completion and not a
  584.  *               queue available interrupt.
  585.  * ERROR         - The command completed with an error.
  586.  * EXCEPTION         - The command completed with a SCSI exception.
  587.  * ABORTED         - The command was aborted.
  588.  * QUEUE_START         - The command was a queue start.
  589.  * QUEUE_AVAILABLE     - The interrupt was due to a queue available condition.
  590.  * 
  591.  */
  592.  
  593.  
  594. /* procedures */
  595.  
  596. #define    JAGUAR_CRB_BLOCK_VALID          0x1
  597. #define    JAGUAR_CRB_CLEAR_INTERRUPT      JAGUAR_CRB_BLOCK_VALID 
  598. #define    JAGUAR_CRB_COMMAND_COMPLETE      0x2
  599. #define    JAGUAR_CRB_ERROR          0x4
  600. #define    JAGUAR_CRB_EXCEPTION          0x8
  601. #define    JAGUAR_CRB_ABORTED         0x10
  602. #define    JAGUAR_CRB_QUEUE_START         0x20
  603. #define    JAGUAR_CRB_QUEUE_AVAILABLE     0x40
  604.  
  605.  
  606. #endif /* __JAGUAR_HBA_INT */
  607.  
  608.